package com.z2k.jdbc.reflect;

import com.z2k.jdbc.entity.Student;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class ResultSetToBean {

    public static List rstobean(ResultSet rs, Class<?> cls) throws Exception {

        List list = new ArrayList();
        //用于获取列数、或者列类型
        ResultSetMetaData meta = rs.getMetaData();
        Object obj = null;
        while(rs.next()){
            //实例化对象
            obj = cls.newInstance();
            //循环获取指定行的每一列消息
            for(int i=1;i<=meta.getColumnCount();i++){
                //当前列名
                String colName = meta.getColumnName(i);
                //设置方法名
                String methodname = "set" + StringUtils.capitalize(colName);

                //获取当前位置的值，返回类型为Object
                Object value = rs.getObject(colName);
                if (value == null){
                    continue;
                }

                //执行set方法
                Method method = obj.getClass().getMethod(methodname, value.getClass());
                method.invoke(obj,value);
            }
            list.add(obj);
        }
        return list;
    }
}
